home *** CD-ROM | disk | FTP | other *** search
-
- .include doscall.mac
- .include iocscall.mac
- * .include fefunc.h
- .include fdef.h
-
- m_stop equ $0a
- play_cnv_data equ $11
- se_play equ $12
- ZMUSIC .macro fnc
- moveq #fnc,d1
- trap #3
- .endm
-
-
-
-
- .text
- .even
-
- .ifndef _LIB
- .dc.l ret
- .dc.l ret
- .dc.l zmd_stop
- .dc.l zmd_stop
- .dc.l zmd_stop
- .dc.l ret
- .dc.l ret
- .dc.l ret
- .dc.l ptr_token
- .dc.l ptr_param
- .dc.l ptr_exec
- .dc.l 0,0,0,0,0
-
-
- zmd_stop:
- bsr zmusic_check
- tst.b d1
- bne @f
- moveq #0,d2
- moveq #0,d3
- moveq #0,d4
- ZMUSIC m_stop
- @@:
-
- lea.l _zmd_ptr(pc),a0
- move.l (a0),-(sp)
- beq @f
- DOS _MFREE
- clr.l (a0)
- @@:
- addq.l #4,sp
- clr.l 4(a0) * zmd_num
- rts
-
-
-
- ret:
- rts
- ptr_token:
- .dc.b 'toroku_zmd',0
- *.dc.b 'read_zmd',0
- .dc.b 'play_zmd',0
- .dc.b 'play_se',0
- .dc.b 0
- .even
- ptr_param:
- .dc.l p_read_zmd
- .dc.l p_play_zmd
- .dc.l p_play_se
- ptr_exec:
- .dc.l e_read_zmd
- .dc.l e_play_zmd
- .dc.l e_play_se
-
-
- p_read_zmd:
- .dc.w $0038 * ary1_str
- .dc.w void_ret
-
- p_play_zmd:
- .dc.w int_val
- .dc.w void_ret
- p_play_se:
- .dc.w int_val
- *.dc.w int_omt
- .dc.w void_ret
-
-
-
-
- ** ** ** ** ** ** ** ** ** **
- error .macro mes,num
- .local l1
- lea.l l1(pc),a1
- moveq #num,d0
- rts
- l1: .dc.b mes,0
- .even
- .endm
-
-
- not_exist_file:
- lea.l 12+12(sp),sp
- moveq #29,d0
- lea.l nef2(pc),a0
- @@:
- move.b (a2)+,(a0)+
- dbeq d0,@b
- move.b #'"',-1(a0)
- clr.b (a0)
- lea.l nef1(pc),a1
- moveq #3,d0
- rts
- nef1: .dc.b '指定のファイルがありません。"'
- nef2: .ds.b 32
- .even
-
- yet_read_zmd:
- error 'すでに ZMD は読み込んでますよ',4
- no_mem:
- error 'メモリを確保出来ませんでした',1
- zmusic_err:
- error 'ZMUSIC が常駐していません',2
- exist_common_com:
- error '効果音には共通コマンドは使えません',8
-
- not_read_zmd:
- addq.l #4,sp
- error 'ZMD を登録していません',5
- irregular_num:
- addq.l #4,sp
- error 'ZMD 番号が不正です',6
- no_data_zms:
- error 'その番号には ZMD は登録されていません',7
-
- ** ** ** ** ** ** ** ** ** **
-
- return_zero:
- moveq.l #0,d0
- return_d0:
- lea.l fac(pc),a0
- move.l d0,6(a0)
- moveq.l #0,d0
- rts
-
- .even
- fac:
- .dc.w 0
- .dc.l 0
- .dc.l 0
-
- ** ** ** ** ** ** **
- * ライブラリ部
-
- .else
-
-
- .xdef _toroku_zmd
- .xdef _play_zmd
- .xdef _play_se
-
-
-
-
-
- not_exist_file:
- lea.l 12+12-4(sp),sp
- not_read_zmd:
- irregular_num:
- addq.l #4,sp
- no_data_zms:
- yet_read_zmd:
- no_mem:
- zmusic_err:
- exist_common_com:
- moveq #-1,d0
- rts
-
- return_zero:
- moveq #0,d0
- return_d0:
- rts
-
-
- .endif
-
-
- ** ** ** ** ** ** ** ** ** **
- _zmd_ptr:
- .dc.l 0 * ptr ( 0,1,2,...,N )
- * =0 の時未登録
- _zmd_num:
- .dc.l 0 * zmd の個数 (=N)
- ** ** ** ** ** ** ** ** ** **
-
-
- _toroku_zmd:
- e_read_zmd:
- bsr zmusic_check
- tst.b d1
- bne zmusic_err
- move.l _zmd_ptr(pc),d0
- bne yet_read_zmd
-
- .ifndef _LIB
- movea.l par1+6(sp),a2 * ファイル名リスト
- addq.l #6,a2
- moveq #0,d1
- moveq #0,d2
- movem.w (a2)+,d1/d2 * 各項のサイズ/添え字の大きさ
- .else
- move.l 4(sp),a2
- movem.l 8(sp),d1/d2
- subq.l #1,d2
- .endif
-
- movem.l d3/d4/a3,-(sp)
- bsr count_zms
-
- move.l d0,-(sp) * メモリ確保
- DOS _MALLOC
- addq.l #4,sp
- tst.l d0
- bmi no_mem
- movea.l d0,a3
- move.l a3,_zmd_ptr
- move.l d2,_zmd_num
-
- bsr read_zms
- movem.l (sp)+,d3/d4/a3
-
- bra return_zero
-
-
-
- ** ** ** ** ** ** ** ** ** **
-
- * 総ファイルサイズを数える
- count_zms:
- movem.l d2/a2,-(sp)
- move.l d2,d4
- addq.l #1,d4
- lsl.l #2,d4 * ptr.list 分
- move.l #0,d3
- count_zms_loop:
- movea.l a2,a0
- tst.b (a0)
- beq @f
- bsr file_exist
- tst.l d0
- beq not_exist_file
- addq.l #1,d0
- bclr #0,d0
- add.l d0,d3
- @@:
- adda.l d1,a2
- dbra d2,count_zms_loop
-
- move.l d3,d0
- add.l d4,d0
- movem.l (sp)+,d2/a2
- rts
-
-
-
- * 読み込む
- read_zms:
- lea.l (a3,d4.l),a1 * a3=ptr.list, a1=zmd
- read_zms_loop:
- clr.w -(sp)
- move.l a2,-(sp)
- DOS _OPEN
- addq.l #6,sp
- tst.l d0
- bge @f
- clr.l (a3)+ * 登録されず
- bra 1f
- @@:
- move.l a1,(a3)+
- move.l d3,-(sp)
- move.l a1,-(sp)
- move.w d0,-(sp)
- DOS _READ
- addq.l #1,d0
- bclr #0,d0
- sub.l d0,d3
- adda.l d0,a1
- DOS _CLOSE
- lea.l 10(sp),sp
- 1:
- adda.l d1,a2
- dbra d2,read_zms_loop
- rts
-
-
-
-
- ** ** ** ** ** ** ** ** ** **
-
-
- _play_zmd:
- e_play_zmd:
- bsr zmd共通
- addq.l #7,a1 * play_cnv_data 用アドレス
- moveq #0,d2 * 高速応答
- ZMUSIC play_cnv_data
-
- bra return_zero
-
- _play_se:
- e_play_se:
- bsr zmd共通
- addq.l #8,a1 * 共通コマンド
- move.w (a1)+,d0
- addq.w #1,d0 * $ffff ?
- bne exist_common_com
-
- moveq #0,d2
- move.b 7(a1),d2 * 絶対チャンネル
- addq.w #1,d2 * 割り込むトラック(だといいな)
- * moveq #8,d2
- ZMUSIC se_play
-
- bra return_zero
-
-
- zmd共通:
- move.l _zmd_ptr(pc),d0
- beq not_read_zmd
- movea.l d0,a2
- .ifndef _LIB
- move.l par1+6+4(sp),d2 * ZMD NUMBER
- .else
- move.l 4+4(sp),d2 * ZMD NUMBER
- .endif
- bmi irregular_num
- cmp.l _zmd_num(pc),d2
- bhi irregular_num
- lsl.w #2,d2
- move.l (a2,d2.w),d0
- beq no_data_zms
- movea.l d0,a1
- rts
-
-
- ** ** ** ** ** ** ** ** ** **
- file_exist:
- lea.l -56(sp),sp
- move.w #$23,-(sp) * A***HR
- move.l a0,-(sp)
- pea.l 6(sp)
- DOS _FILES
-
- tst.l d0
- bmi nofile
-
- move.l 10+26(sp),d0 *file_size
- * move.l 10+22(sp),d1 *file_date&time
- fe:
- lea.l 10+56(sp),sp
- rts
-
- nofile:
- moveq.l #0,d0
- bra fe
-
- ** ** ** ** ** ** ** ** ** **
-
- zmusic_check:
- suba.l a1,a1
- IOCS _B_SUPER
- movea.l d0,a1
-
- movea.l $8c.w,a0
- subq.l #8,a0
- cmpi.l #'ZmuS',(a0)+
- bne @f
- cmpi.w #'iC',(a0)
- @@:
- sne.b d1 * 常駐 d1.b=$00
-
- IOCS _B_SUPER
- rts
-
-
-
-
-
- .end
-
-
-